
/*
 * Copyright 2002-2018 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/*
 *版权所有2002-2018原作者。
 *
 *根据Apache许可证2.0版（“许可证”）许可；
 *除非符合许可证的规定，否则您不得使用此文件。
 *您可以在以下网址获取许可证副本
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 *除非适用法律要求或书面同意，否则软件
 *根据许可证分发是在“按原样”的基础上分发的，
 *无任何明示或暗示的保证或条件。
 *有关管理权限的特定语言，请参阅许可证
 *许可证下的限制。
 */

package org.springframework.format.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Declares that a field or method parameter should be formatted as a number.
 *
 * <p>Supports formatting by style or custom pattern string. Can be applied
 * to any JDK {@code Number} type such as {@code Double} and {@code Long}.
 *
 * <p>For style-based formatting, set the {@link #style} attribute to be the
 * desired {@link Style}. For custom formatting, set the {@link #pattern}
 * attribute to be the number pattern, such as {@code #, ###.##}.
 *
 * <p>Each attribute is mutually exclusive, so only set one attribute per
 * annotation instance (the one most convenient one for your formatting needs).
 * When the {@link #pattern} attribute is specified, it takes precedence over
 * the {@link #style} attribute. When no annotation attributes are specified,
 * the default format applied is style-based for either number of currency,
 * depending on the annotated field or method parameter type.
 *
 * @author Keith Donald
 * @author Juergen Hoeller
 * @since 3.0
 * @see java.text.NumberFormat
 */
/**
 *声明字段或方法参数应格式化为数字。
 *
 *＜p＞支持按样式或自定义模式字符串进行格式化。可以应用
 *到任何JDK｛@code Number｝类型，如｛@codeDouble｝和｛@code Long｝。
 *
 *＜p＞对于基于样式的格式设置，请将｛@link#style｝属性设置为
 *所需的｛@link样式｝。对于自定义格式，请设置｛@link#模式｝
 *属性为数字模式，例如{@code#，###.##}。
 *
 *＜p＞每个属性都是互斥的，因此每个属性只设置一个属性
 *注释实例（最适合您的格式化需求的实例）。
 *当指定{@link#pattern}属性时，它优先于
 *{@link#style}属性。当没有指定注释属性时，
 *所应用的默认格式是基于样式的，用于任意数量的货币，
 *取决于注释的字段或方法参数类型。
 *
 *@作者Keith Donald
 *@作者Juergen Hoeller
 *@自3.0起
 *@参见java.text.NumberFormat
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
public @interface NumberFormat {

	/**
	 * The style pattern to use to format the field.
	 * <p>Defaults to {@link Style#DEFAULT} for general-purpose number formatting
	 * for most annotated types, except for money types which default to currency
	 * formatting. Set this attribute when you wish to format your field in
	 * accordance with a common style other than the default style.
	 */
	/**
	 *用于设置字段格式的样式模式。
	 *＜p＞对于通用数字格式，默认为｛@link Style#DEFAULT｝
	 *对于大多数带注释的类型，默认为货币的货币类型除外
	 *格式化。当您希望在中设置字段格式时，请设置此属性
	 *根据除了默认样式之外的通用样式。
	 */
	Style style() default Style.DEFAULT;

	/**
	 * The custom pattern to use to format the field.
	 * <p>Defaults to empty String, indicating no custom pattern String has been specified.
	 * Set this attribute when you wish to format your field in accordance with a
	 * custom number pattern not represented by a style.
	 */
	/**
	 *用于设置字段格式的自定义模式。
	 *＜p＞默认为空字符串，表示没有指定自定义模式字符串。
	 *当您希望根据
	 *没有样式表示的自定义数字模式。
	 */
	String pattern() default "";


	/**
	 * Common number format styles.
	 */
	/**
	 *常见的数字格式样式。
	 */
	enum Style {

		/**
		 * The default format for the annotated type: typically 'number' but possibly
		 * 'currency' for a money type (e.g. {@code javax.money.MonetaryAmount)}.
		 * @since 4.2
		 */
		/**
		 *注释类型的默认格式：通常为“数字”，但可能
		 *货币类型的“currency”（例如｛@code javax.money.MonetaryAmount）｝。
		 *@自4.2起
		 */
		DEFAULT,

		/**
		 * The general-purpose number format for the current locale.
		 */
		/**
		 *当前区域设置的通用数字格式。
		 */
		NUMBER,

		/**
		 * The percent format for the current locale.
		 */
		/**
		 *当前区域设置的百分比格式。
		 */
		PERCENT,

		/**
		 * The currency format for the current locale.
		 */
		/**
		 *当前区域设置的货币格式。
		 */
		CURRENCY
	}

}
